home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 2000 July / macformat-092.iso / Dreamweaver 3 / Configuration / Shared / MM / Scripts / event.js next >
Encoding:
Text File  |  1999-12-01  |  5.1 KB  |  184 lines

  1. // Copyright 1999 Macromedia, Inc. All rights reserved.
  2.  
  3. /* ----------------------------------------------------------------------*/
  4. //event functions
  5.  
  6. //INTERFACE
  7. //
  8. //event functions:
  9. //
  10. //  notify(menuID, stdCallStr)
  11. //    - called by the menu item to notify interested parties.
  12. //
  13. //  registerID(menuID, cmdName, notifyAfter)
  14. //    - called to register for events before or after the invoke string
  15. //      on a specific menuID
  16. //
  17. //  registerFnCall(fnCallStr, cmdName, notifyAfter)
  18. //    - called to register for events before or after a specific function call
  19. //
  20. //  addToMenuFile(menuID, fnCallStr)
  21. //    - called to add notifiers to the menus.xml file.
  22. //      (specifiy one of menuID or fnCallStr)
  23. //
  24.  
  25.  
  26. function event() { }
  27.  
  28. // static properties
  29. event.menuFile = dw.getConfigurationPath() + "/menus.xml";
  30. event.callStr = "MM.event.notify";
  31.  
  32. event.preList  = new Array();
  33. event.postList = new Array();
  34.  
  35. event.handled = '';
  36. event.menuID = '';
  37. event.fnCall = '';
  38. event.isPost = '';
  39.  
  40.  
  41. // static methods
  42. event.getFnID = event_getFnID;
  43. event.notify = event_notify;
  44. event.registerID = event_registerID;
  45. event.registerFnCall = event_registerFnCall;
  46. event.addToMenuFile = event_addToMenuFile;
  47.  
  48.  
  49. /* ----------------------------------------------------------------------*/
  50.  
  51. //Returns a simple string which can be used as an array name
  52. //
  53. function event_getFnID(fnCallStr) {
  54.   var retVal = fnCallStr.replace(/[.()]/g, '');
  55.   return retVal;
  56. }
  57.  
  58.  
  59. //Called by menus.xml to notify interested parties of events.
  60. //
  61. function event_notify(menuID, stdCallStr) {
  62.   var itemStr, retVal = false;
  63.  
  64.   event.menuID = menuID;
  65.   event.fnCall = stdCallStr;
  66.   event.handled = false;
  67.   event.isPost = false;
  68.  
  69.   itemStr = (menuID) ? menuID : event.getFnID(stdCallStr);
  70.  
  71.   if (event.preList[itemStr] != null) {
  72.     for (var i=0; !retVal && i < event.preList[itemStr].length; i++) {
  73.       dw.popupCommand(event.preList[itemStr][i]);
  74.       retVal = event.handled;
  75.   } }
  76.  
  77.   if (!retVal) eval(stdCallStr);
  78.  
  79.   event.isPost = true;
  80.  
  81.   if (event.postList[itemStr] != null) {
  82.     for (var i=0; !retVal && i < event.postList[itemStr].length; i++) {
  83.       dw.popupCommand(event.postList[itemStr][i]);
  84.       retVal = event.handled;
  85.   } }
  86. }
  87.  
  88.  
  89. //Called by HTML files in the Startup folder to register for events
  90. // based on a specific menu ID string.
  91. //
  92. function event_registerID(menuID, cmdName, notifyAfter) {
  93.   var handle, defined = false;
  94.   var menuDOM, menuitemList, item, idStr, invokeStr, changed=false;
  95.  
  96.   if (!notifyAfter) {
  97.     if (event.preList[menuID] == null)
  98.       event.preList[menuID] = new Array();
  99.     event.preList[menuID].push(cmdName);
  100.   } else {
  101.     if (event.postList[menuID] == null)
  102.       event.postList[menuID] = new Array();
  103.     event.postList[menuID].push(cmdName);
  104.   }
  105. }
  106.  
  107.  
  108. //Called by HTML files in the Startup folder to register for events
  109. // based on a specific function call.
  110. //
  111. function event_registerFnCall(fnCallStr, cmdName, notifyAfter) {
  112.   var simpleName, handle, defined = false;
  113.   var menuDOM, menuitemList, item, invokeStr, index, changed=false;
  114.  
  115.   simpleName = event.getFnID(fnCallStr);
  116.  
  117.   if (!notifyAfter) {
  118.     if (event.preList[simpleName] == null)
  119.       event.preList[simpleName] = new Array();
  120.     event.preList[simpleName].push(cmdName);
  121.   } else {
  122.     if (event.postList[simpleName] == null)
  123.       event.postList[simpleName] = new Array();
  124.     event.postList[simpleName].push(cmdName);
  125.   }
  126. }
  127.  
  128.  
  129. //Add the necessary notify calls to the menus.xml file.
  130. // Only specify one of menuID or fnCallStr.
  131. //
  132. function event_addToMenuFile(menuID, fnCallStr) {
  133.   var simpleName, handle, defined = false;
  134.   var menuDOM, menuitemList, item, invokeStr, index, changed=false;
  135.  
  136.   itemStr = (menuID) ? menuID : event.getFnID(fnCallStr);
  137.  
  138.   //handle = MMNotes.open(event.menuFile, true);
  139.   //if (handle != 0) {
  140.   //  defined = eval(MMNotes.get(handle, itemStr));
  141.   //  MMNotes.close(handle);
  142.   //}
  143.  
  144.   if (!defined) {
  145.     menuDOM = dw.getDocumentDOM(event.menuFile);
  146.     menuitemList = menuDOM.getElementsByTagName("MENUITEM");
  147.     for (var i=0; i < menuitemList.length; i++) {
  148.       item = menuitemList[i];
  149.       if (!item.outerHTML) continue;
  150.       idStr = item.getAttribute("ID");
  151.       invokeStr = item.getAttribute("INVOKE");
  152.       if (invokeStr != null &&
  153.           ((menuID && idStr != null && idStr == menuID) ||
  154.            (fnCallStr && invokeStr.indexOf(fnCallStr) != -1)) &&
  155.           invokeStr.indexOf(event.callStr) == -1) {
  156.  
  157.         if (menuID) {
  158.           invokeStr = event.callStr + "('" + menuID + "','" + escQuotes(invokeStr) + "')";
  159.         } else {
  160.           index = invokeStr.indexOf(fnCallStr);
  161.           invokeStr = invokeStr.substring(0,index) +
  162.                       event.callStr + "('','" + escQuotes(fnCallStr) + "')" +
  163.                       invokeStr.substring(index + fnCallStr.length);
  164.         }
  165.  
  166.         item.setAttribute("INVOKE", invokeStr);
  167.         changed = true;
  168.       }
  169.     }
  170.  
  171.     if (changed) {
  172.       dw.saveDocument(menuDOM, event.menuFile);
  173.       dw.releaseDocument(menuDOM);
  174.     }
  175.  
  176.     //handle = MMNotes.open(event.menuFile, true);
  177.     //if (handle != 0) {
  178.     //  MMNotes.set(handle, itemStr, 'true');
  179.     //  MMNotes.close(handle);
  180.     //}
  181.  
  182.   }
  183. }
  184.